#ifndef _ISTORAGE_H
#define _ISTORAGE_H

#include <list>
#include <functional>
#include "FSBAllocator.hh"

struct StorageChunk {}; // Concrete StorageChunks will be inherited from this one

class IStorage {
	public:

	virtual ~IStorage() {};

	virtual StorageChunk *Alloc(uint64_t size,
	    const std::list<StorageChunk**, FSBAllocator<StorageChunk**>>& currently_unused,
	    std::function<void (StorageChunk**)> delete_func) = 0;
	virtual void *Load(StorageChunk *p_st_data) = 0;
	virtual void Free(StorageChunk *p_st_data) = 0;
	
	virtual void AssertOk() = 0;

};

#endif // _ISTORAGE_H
